import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.Timer;

public class MainWindow implements ActionListener {
	SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");

	NoNamed exec = new NoNamed();
	private JFrame frmSleeptux;
	private JTextField txtMinutos;
	Date data = new Date();
	String hora = formatter.format(data);
	String tempo = null;
	
	Timer temporizador;
	Timer temporizadorRegress;
	private JTextPane txtpnGg;
	Integer tempoRegress = 0;
	JButton btnDesligar = new JButton("Desligar");
	JButton btnReiniciar = new JButton("Reiniciar");
	JButton btnCancelar = new JButton("Cancelar");
	

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					MainWindow window = new MainWindow();
					window.frmSleeptux.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public MainWindow() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frmSleeptux = new JFrame();
		frmSleeptux.setTitle("SleepTux");
		frmSleeptux.setResizable(false);
		frmSleeptux.setBounds(100, 100, 297, 323);
		frmSleeptux.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frmSleeptux.getContentPane().setLayout(null);

		JButton btnDesligarAgora = new JButton("Desligar agora");
		btnDesligarAgora.setFont(new Font("Dialog", Font.BOLD, 10));
		btnDesligarAgora.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {

				try {
					exec.shutdownNow();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

			}
		});
		btnDesligarAgora.setBounds(12, 230, 126, 25);
		frmSleeptux.getContentPane().add(btnDesligarAgora);

		JButton button = new JButton("Reiniciar agora");
		button.setFont(new Font("Dialog", Font.BOLD, 10));
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				try {
					exec.rebootNow();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		button.setBounds(159, 230, 126, 25);
		frmSleeptux.getContentPane().add(button);

		btnDesligar.setFont(new Font("Dialog", Font.BOLD, 10));
		btnDesligar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				tempo = txtMinutos.getText();
				if (Integer.parseInt(tempo) < 1) {
					JOptionPane.showMessageDialog(null,
							"Só é aceito números maior que 0.");
				} else {
					try {

						tempo = txtMinutos.getText();
						tempoRegress = Integer.parseInt(tempo);
						System.out.println(tempoRegress);
						exec.shutdownWhen(tempo);
						temporizadorRegress.setActionCommand("Desligar");
						temporizadorRegress.start();
						JOptionPane.showMessageDialog(frmSleeptux,
								"Seu computador ira desligar em " + tempo
										+ " minutos");
						btnCancelar.setEnabled(true);
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}

			}
		});
		btnDesligar.addActionListener(this);
		btnDesligar.setBounds(12, 164, 83, 25);
		frmSleeptux.getContentPane().add(btnDesligar);

		btnReiniciar.setFont(new Font("Dialog", Font.BOLD, 10));
		btnReiniciar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				tempo = txtMinutos.getText();
				if (Integer.parseInt(tempo) < 1) {
					JOptionPane.showMessageDialog(null,
							"Só é aceito números maior que 0.");
				} else {
					try {
						tempoRegress = Integer.parseInt(tempo);
						System.out.println(tempoRegress);
						exec.rebootWhen(txtMinutos.getText());
						temporizadorRegress.setActionCommand("Reiniciar");
						temporizadorRegress.start();
						JOptionPane.showMessageDialog(frmSleeptux,
								"Seu computador ira reiniciar em " + tempo
										+ " minutos");
						btnCancelar.setEnabled(true);
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
		});
		btnDesligar.addActionListener(this);
		btnReiniciar.setBounds(107, 164, 83, 25);
		frmSleeptux.getContentPane().add(btnReiniciar);

		
		btnCancelar.setEnabled(false);
		btnCancelar.setFont(new Font("Dialog", Font.BOLD, 10));
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				try {
					exec.shutdownCancel();
					temporizadorRegress.stop();
					JOptionPane.showMessageDialog(frmSleeptux,
							"O desligamento agendado foi cancelado.");
					btnCancelar.setEnabled(false);
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		btnCancelar.setBounds(202, 164, 83, 25);
		frmSleeptux.getContentPane().add(btnCancelar);

		JLabel lblHoraAtual = new JLabel("Hora atual:");
		lblHoraAtual.setBounds(107, 12, 90, 25);
		frmSleeptux.getContentPane().add(lblHoraAtual);

		txtpnGg = new JTextPane();
		txtpnGg.setEditable(false);
		txtpnGg.setFont(new Font("Dialog", Font.PLAIN, 14));
		txtpnGg.setText("  "+hora.substring(11));

		txtpnGg.setBounds(193, 12, 83, 25);
		frmSleeptux.getContentPane().add(txtpnGg);

		txtMinutos = new JtextFieldSomenteNumeros();
		txtMinutos.setText("Minutos");
		txtMinutos.setBounds(64, 58, 59, 36);
		frmSleeptux.getContentPane().add(txtMinutos);
		txtMinutos.setColumns(10);

		JLabel lblTempo = new JLabel("Tempo:");
		lblTempo.setBounds(12, 68, 70, 15);
		frmSleeptux.getContentPane().add(lblTempo);
		
		temporizador = new Timer(1000, this);
		temporizador.setActionCommand("temporizador");
		temporizador.start();
		
		temporizadorRegress = new Timer(60000, this);
		//temporizadorRegress.setActionCommand("temporizadorRegress");
	}

	@Override
	public void actionPerformed(ActionEvent e) {

				data.setTime(System.currentTimeMillis());
				hora = formatter.format(data);
		        txtpnGg.setText("  "+hora.substring(11));
		
				if (e != null && !e.getActionCommand().equals("temporizador")) {
			
				tempoRegress--;
				
				if (tempoRegress == 1 && !e.getActionCommand().equals(btnDesligar.getActionCommand())) {
					JOptionPane.showMessageDialog(null,
							"Seu computador reiniciara em " + tempoRegress
									+ " minuto");
				
			}
				else if(tempoRegress == 1 && e.getActionCommand().equals(btnDesligar.getActionCommand())){
					JOptionPane.showMessageDialog(null,
							"Seu computador desligara em " + tempoRegress
									+ " minuto");
				}
		}
	}
}
